home *** CD-ROM | disk | FTP | other *** search
/ TPUG - Toronto PET Users Group / TPUG Users Group CD / TPUG Users Group CD.iso / C64 / T-TPUG Old Monthly Disks / (c)tf.d64 / screen 40.3.pal (.txt) < prev    next >
Commodore BASIC  |  2007-02-04  |  16KB  |  635 lines

  1. 5 OPEN15,8,15,"I0":OPEN2,8,2,"0:SCREEN 40.3.ML.D,P,W"
  2. 10 SYS700
  3. 1000 .OPT P,O2
  4. 1010 *=$C000
  5. 1020 ;*********************************
  6. 1030 ;                                *
  7. 1040 ;        SCREEN 40.3.M/L         *
  8. 1050 ;                                *
  9. 1060 ;               BY               *
  10. 1070 ;                                *
  11. 1080 ;           BOB SWIFT            *
  12. 1090 ;                                *
  13. 1100 ;           TPUG #507            *
  14. 1110 ;                                *
  15. 1120 ;*********************************
  16. 1130 ;                                *
  17. 1140 ;  THIS PROGRAM ALLOWS YOU TO    *
  18. 1150 ;  DRAW ON THE SCREEN USING ALL  *
  19. 1160 ;  COLORS, CURSOR CONTROLS, TEXT *
  20. 1170 ;  AND GRAPHICS CHARACTERS. WHEN *
  21. 1180 ;  YOUR SCREEN IS COMPLETE, THE  *
  22. 1190 ;  PROGRAM WILL WRITE A BASIC    *
  23. 1200 ;  PROGRAM THAT WILL RE-DRAW     *
  24. 1210 ;  YOUR SCREEN. THIS PROGRAM IS  *
  25. 1220 ;  RUN IN THE FOLLOWING MANNER.  *
  26. 1230 ;                                *
  27. 1240 ;     SYS 49152, LN              *
  28. 1250 ;                                *
  29. 1260 ;  WHERE                         *
  30. 1270 ;                                *
  31. 1280 ;   LN=START BASIC LINE NUMBER   *
  32. 1290 ;                                *
  33. 1300 ;*********************************
  34. 1310 ;                                *
  35. 1320 ;  COMMANDS.                     *
  36. 1330 ;                                *
  37. 1340 ; <F1> = CHANGE BORDER COLOR     *
  38. 1350 ; <F2> = COMPILE BASIC PROGRAM   *
  39. 1360 ; <F3> = CHANGE BACKGROUND COLOR *
  40. 1370 ; <F7> = DISPLAY HELP SCREEN     *
  41. 1380 ; <F8> = EXIT TO BASIC           *
  42. 1390 ;                                *
  43. 1400 ;*********************************
  44. 1410 ;
  45. 1420 ;
  46. 1430 ;          ***********
  47. 1440 ;          * EQUATES *
  48. 1450 ;          ***********
  49. 1460 ;
  50. 1470 F1 =133
  51. 1480 F2 =137
  52. 1490 F3 =134
  53. 1500 F7 =136
  54. 1510 F8 =140
  55. 1520 BKGRND =53281
  56. 1530 BORDER =53280
  57. 1540 GETIN =$FFE4
  58. 1550 PLOT =$FFF0
  59. 1560 CHROUT =$FFD2
  60. 1570 SCREEN =1024
  61. 1580 COLOR =55296
  62. 1590 CLALL =$FFE7
  63. 1600 BASPNT =$19
  64. 1610 MEMLOC =$1B
  65. 1620 SCN =$1D
  66. 1630 COL =$1F
  67. 1640 COLORS =$E8DA
  68. 1650 ;
  69. 1660 ;   **************************
  70. 1670 ;   * READ START LINE NUMBER *
  71. 1680 ;   **************************
  72. 1690 ;
  73. 1700 JSR $AEFD ;CHECK FOR COMMA
  74. 1710 JSR $AD9E ;EVALUATE EXPRESSION
  75. 1720 JSR $B7F7 ;REAL TO INTEGER
  76. 1730 LDA $14 ;LOAD <LINE NUMBER
  77. 1740 STA LINUM+1
  78. 1750 LDA $15 ;LOAD >LINE NUMBER
  79. 1760 STA LINUM
  80. 1770 ;
  81. 1780 ;        **************
  82. 1790 ;        * INITIALIZE *
  83. 1800 ;        **************
  84. 1810 ;
  85. 1820 CLI ;RESET INTERRUPTS
  86. 1830 JSR CLALL ;RESET INPUT/OUTPUT
  87. 1840 JSR HELP ;DISPLAY HELP SCREEN
  88. 1850 LDA #147 ;CLEAR SCREEN
  89. 1860 ;
  90. 1870 ;       *****************
  91. 1880 ;       * CREATE SCREEN *
  92. 1890 ;       *****************
  93. 1900 ;
  94. 1910 PRNTC JSR CHROUT ;OUTPUT CHARACTER
  95. 1920 GETCHR LDA #$00 ;ENABLE CURSOR
  96. 1930 STA $CC
  97. 1940 GET1 LDA $C6 ;NUMBER OF CHARACTERS
  98. 1950 BEQ GET1 ;NONE - TRY AGAIN
  99. 1960 STA $CC ;DISABLE CURSOR
  100. 1970 SEI ;TURN OFF INTERRUPTS
  101. 1980 LDA $CF ;CURSOR IN BLINK PHASE
  102. 1990 BEQ BLINK ;YES - MOVE ON
  103. 2000 LDA $CE ;GET HIDDEN CHARACTER
  104. 2010 LDX $0287 ;GET HIDDEN COLOR
  105. 2020 LDY #$00 ;PUT CURSOR IN...
  106. 2030 STY $CF ;...BLINK PHASE
  107. 2040 JSR $EA13 ;PRINT TO SCREEN
  108. 2050 BLINK JSR $E5B4 ;GET FROM KEYBOARD BUFFER
  109. 2060 CMP #F1 ;IS IT <F1>
  110. 2070 BNE NOTF1 ;NO - MOVE ON
  111. 2080 LDX #$00 ;SELECT BORDER
  112. 2090 CHGCLR INC BORDER,X ;CHANGE BORDER/BACKGROUND
  113. 2100 LDA #$0F ;CLEAR ...
  114. 2110 AND BORDER,X ;...HIGH ...
  115. 2120 STA BORDER,X ;...NYBBLE
  116. 2130 JMP GETCHR ;(null) BACK FOR MORE
  117. 2140 NOTF1 CMP #F3 ;IS IT <F3>
  118. 2150 BNE NOTF3 ;NO - MOVE ON
  119. 2160 LDX #$01 ;SELECT BACKGROUND
  120. 2170 BNE CHGCLR ;(null) CHANGE COLOR
  121. 2180 NOTF3 CMP #F8 ;IS IT <F8>
  122. 2190 BNE NOTF8 ;NO - MOVE ON
  123. 2200 QUIT LDA #$00 ;CLEAR KEYBOARD BUFFER
  124. 2210 STA $C6
  125. 2220 LDA #$0D ;PRINT CARRIAGE RETURN
  126. 2230 JSR CHROUT
  127. 2240 RTS ;(null) BACK TO BASIC
  128. 2250 NOTF8 CMP #F7 ;IS IT <F7>
  129. 2260 BNE NOTF7 ;NO - MOVE ON
  130. 2270 JSR HELP ;DISPLAY HELP SCREEN
  131. 2280 JMP GETCHR ;BACK FOR MORE
  132. 2290 NOTF7 CMP #F2 ;IS IT <F2>
  133. 2300 BNE PRNTC ;NO - PRINT AND GET ANOTHER
  134. 2310 JMP START ;START WRITING BASIC
  135. 2320 ;
  136. 2330 ;      ******************
  137. 2340 ;      * FLAGS AND DATA *
  138. 2350 ;      ******************
  139. 2360 ;
  140. 2370 RVSFLG .BYTE 0
  141. 2380 COLFLG .BYTE 255
  142. 2390 LNCNT .BYTE 0
  143. 2400 LINUM .BYTE 0,0,1,1,0
  144. 2410 POKES .BYTE 151
  145. 2420 .ASC "53280,00:"
  146. 2430 .BYTE 151
  147. 2440 .ASC "53281,00:"
  148. 2450 .BYTE 153,34,147,142,34,59
  149. 2460 LOCOL .ASC "        "
  150. 2470 .ASC "  111111"
  151. 2480 HICOL .ASC "01234567"
  152. 2490 .ASC "89012345"
  153. 2500 ;
  154. 2510 ;    *********************
  155. 2520 ;    * STORE LINE NUMBER *
  156. 2530 ;    *********************
  157. 2540 ;
  158. 2550 LINPRT LDY #$05 ;SET COUNTER
  159. 2560 LINCNT DEY ;COUNT
  160. 2570 LDA LINUM,Y ;GET INFO
  161. 2580 JSR STOINC ;SAVE INFO
  162. 2590 TYA ;CHECK COUNTER - ARE WE DONE
  163. 2600 BNE LINCNT ;NO - (null) BACK FOR MORE
  164. 2610 LDA #$FF
  165. 2620 CMP LINUM+1 ;INCREMENT HIGH AND LOW ?
  166. 2630 BNE LBACK ;NO - DO LOW ONLY
  167. 2640 INC LINUM ;DO HIGH BYTE
  168. 2650 LBACK INC LINUM+1 ;DO LOW BYTE
  169. 2660 RTS
  170. 2670 ;
  171. 2680 ;  ******************************
  172. 2690 ;  * STORE AND INCREMENT MEMORY *
  173. 2700 ;  ******************************
  174. 2710 ;
  175. 2720 STOINC STY $26 ;SAVE Y-REGISTER
  176. 2730 LDY #$00 ;SET INDEX OFFSET
  177. 2740 STA (BASPNT),Y ;SAVE BYTE TO MEMORY
  178. 2750 JSR MEMPLS ;INCREMENT MEMORY COUNTER
  179. 2760 LDY $26 ;GET Y-REGISTER
  180. 2770 RTS
  181. 2780 ;
  182. 2790 ;      ******************
  183. 2800 ;      * VALUE TO ASCII *
  184. 2810 ;      ******************
  185. 2820 ;
  186. 2830 DIGITS AND #$0F ;MASK OFF HIGH NYBBLE
  187. 2840 TAX ;SAVE VALUE
  188. 2850 LDA HICOL,X ;GET HIGH COLOR
  189. 2860 TAY ;SAVE IN Y-REGISTER
  190. 2870 LDA LOCOL,X ;GET LOW COLOR
  191. 2880 RTS
  192. 2890 ;
  193. 2900 ;     ********************
  194. 2910 ;     * INCREMENT MEMORY *
  195. 2920 ;     ********************
  196. 2930 ;
  197. 2940 MEMPLS LDA #$FF
  198. 2950 CMP BASPNT ;INCREMENT HIGH AND LOW ?
  199. 2960 BNE MBACK ;NO - MOVE ON
  200. 2970 INC BASPNT+1 ;INCREMENT HIGH BYTE
  201. 2980 MBACK INC BASPNT ;INCREMENT LOW BYTE
  202. 2990 RTS
  203. 3000 ;
  204. 3010 ;    ***********************
  205. 3020 ;    * STORE MEMORY BUFFER *
  206. 3030 ;    ***********************
  207. 3040 ;
  208. 3050 MEMSTO STY $26 ;SAVE Y-REGISTER
  209. 3060 LDY #$00 ;SET INDEX OFFSET
  210. 3070 STA (MEMLOC),Y ;SAVE TO BUFFER
  211. 3080 LDY $26 ;GET Y-REGISTER
  212. 3090 ;
  213. 3100 ;  ****************************
  214. 3110 ;  * INCREMENT BUFFER POINTER *
  215. 3120 ;  ****************************
  216. 3130 ;
  217. 3140 MEMADD LDA #$FF
  218. 3150 CMP MEMLOC ;INCREMENT HIGH AND LOW ?
  219. 3160 BNE MMBACK ;NO - MOVE ON
  220. 3170 INC MEMLOC+1 ;INCREMENT HIGH BYTE
  221. 3180 MMBACK INC MEMLOC ;INCREMENT LOW BYTE
  222. 3190 RTS
  223. 3200 ;
  224. 3210 ;   *************************
  225. 3220 ;   * TRANSFER MEMORY BLOCK *
  226. 3230 ;   *************************
  227. 3240 ;
  228. 3250 TRNSFR LDY #$00 ;SET OFFSET
  229. 3260 MOVLP LDA (MEMLOC),Y ;GET BYTE
  230. 3270 JSR STOINC ;SAVE BYTE
  231. 3280 JSR MEMADD ;INCREMENT POINTER
  232. 3290 LDA BASPNT ;CHECK LOW BYTE
  233. 3300 CMP SCN ;IS IT THE SAME
  234. 3310 BNE MOVLP ;NO - BACK FOR MORE
  235. 3320 LDA BASPNT+1 ;CHECK HIGH BYTE
  236. 3330 CMP SCN+1 ;IS IT THE SAME
  237. 3340 BNE MOVLP ;NO - BACK FOR MORE
  238. 3350 RTS ;YES - RETURN
  239. 3360 ;
  240. 3370 ;
  241. 3380 ;
  242. 3390 ;*********************************
  243. 3400 ;                                *
  244. 3410 ;      BUILD BASIC PROGRAM       *
  245. 3420 ;                                *
  246. 3430 ;*********************************
  247. 3440 ;
  248. 3450 ;
  249. 3460 ;
  250. 3470 ;    ***********************
  251. 3480 ;    * INITIALIZE POINTERS *
  252. 3490 ;    ***********************
  253. 3500 ;
  254. 3510 START LDA #$01
  255. 3520 STA $2B ;START OF BASIC LOW BYTE
  256. 3530 LDA #$08
  257. 3540 STA $2C ;START OF BASIC HIGH BYTE
  258. 3550 STA BASPNT+1 ;BASIC POINTER HIGH BYTE
  259. 3560 LDX #$00
  260. 3570 STX RVSFLG ;REVERSE FLAG
  261. 3580 STX SCN ;SCREEN LOCATION LOW BYTE
  262. 3590 STX COL ;COLOR LOCATION LOW BYTE
  263. 3600 STX BASPNT ;BASIC POINTER LOW BYTE
  264. 3610 JSR LINPRT ;STORE FIRST LINE #
  265. 3620 LDA #$FF
  266. 3630 STA COLFLG ;SET IMPOSSIBLE COLOR
  267. 3640 LDX #26 ;FIRST LINE COUNTER
  268. 3650 LDY #$00 ;COUNTER
  269. 3660 STY MEMLOC ;BUFFER POINTER LOW
  270. 3670 ;
  271. 3680 ;    ***********************
  272. 3690 ;    * FIRST LINE OF BASIC *
  273. 3700 ;    ***********************
  274. 3710 ;
  275. 3720 LPOKE LDA POKES,Y ;LOAD DATA
  276. 3730 JSR STOINC ;SAVE DATA
  277. 3740 INY ;INCREMENT OFFSET
  278. 3750 DEX ;DECREMENT POINTER
  279. 3760 BNE LPOKE ;BACK FOR MORE
  280. 3770 LDA $D018 ;UPPER/LOWER CASE FLAG
  281. 3780 AND #$02 ;CHECK PROPER BIT
  282. 3790 BEQ ENDCSE ;UPPER CASE - MOVE ON
  283. 3800 LDA #14 ;ASCII LOWER CASE
  284. 3810 STA $081C ;SAVE IN BASIC
  285. 3820 ENDCSE LDA BORDER ;GET BORDER COLOR
  286. 3830 JSR DIGITS ;CONVERT TO ASCII
  287. 3840 STA $080C ;SAVE IN BASIC
  288. 3850 STY $080D
  289. 3860 LDA BKGRND ;GET BACKGROUND COLOR
  290. 3870 JSR DIGITS ;CONVERT TO ASCII
  291. 3880 STA $0816 ;SAVE IN BASIC
  292. 3890 STY $0817
  293. 3900 LDA #$40
  294. 3910 STA MEMLOC+1 ;BUFFER POINTER HIGH
  295. 3920 LDA #$04
  296. 3930 STA SCN+1 ;SCREEN POINTER HIGH
  297. 3940 LDA #$D8
  298. 3950 STA COL+1 ;COLOR POINTER HIGH
  299. 3960 LDX #$00 ;SCREEN LINE COUNTER
  300. 3970 ;
  301. 3980 ;    **********************
  302. 3990 ;    * COMPILE PRINT INFO *
  303. 4000 ;    **********************
  304. 4010 ;
  305. 4020 STLINE LDY #$00 ;SCREEN COLUMN COUNTER
  306. 4030 STY LNCNT ;HOW MUCH TO PRINT
  307. 4040 RDCHR1 LDA (SCN),Y ;GET SCREEN CHARACTER
  308. 4050 INY ;INCREMENT COLUMN COUNTER
  309. 4060 CMP #$20 ;IS CHARACTER A SPACE
  310. 4070 BEQ CHRBAD ;YES - MOVE ON
  311. 4080 STY LNCNT ;SET LINE POSITION
  312. 4090 CHRBAD CPY #$28 ;END OF LINE
  313. 4100 BNE RDCHR1 ;NO - (null) BACK FOR MORE
  314. 4110 LDA LNCNT ;ANY PRINT ON LINE
  315. 4120 BNE SOME ;YES - MOVE ON
  316. 4130 LDA #$11 ;CURSOR DOWN
  317. 4140 JSR MEMSTO ;SAVE TO BUFFER
  318. 4150 (null)BACK CLC
  319. 4160 LDA #$28 ;ADD 40 TO SCREEN LOCATION
  320. 4170 ADC SCN
  321. 4180 STA SCN
  322. 4190 STA COL ;AND COLOR LOCATION
  323. 4200 BCC CKMORE ;CHECK SOME MORE
  324. 4210 INC SCN+1 ;INCREMENT HIGH BYTES
  325. 4220 INC COL+1
  326. 4230 CKMORE INX ;LINE COUNTER
  327. 4240 CPX #$19 ;END OF SCREEN
  328. 4250 BNE STLINE ;NO - BACK FOR MORE
  329. 4260 LDA #$00 ;SET END OF DATA
  330. 4270 JSR MEMSTO
  331. 4280 LDA #$00 ;SET END OF DATA
  332. 4290 JSR MEMSTO
  333. 4300 JSR MEMLOW
  334. 4310 JMP COMPIL ;YES - WRITE TO BASIC
  335. 4320 ;
  336. 4330 ;    ************************
  337. 4340 ;    * PRINT INFO TO BUFFER *
  338. 4350 ;    ************************
  339. 4360 ;
  340. 4370 SOME LDY #$00 ;OFFSET COUNTER
  341. 4380 SOME1 LDA (SCN),Y ;SCREEN CHARACTER
  342. 4390 CMP #$20 ;IS IT A SPACE
  343. 4400 BNE NOTSPC ;NO - MOVE ON
  344. 4410 LDA #$1D ;CURSOR RIGHT
  345. 4420 MEMPRT JSR MEMSTO ;SAVE TO BUFFER
  346. 4430 JMP SOMNXT ;(null) CHECK FOR MORE
  347. 4440 NOTSPC AND #$80 ;HIGHER THAN 127
  348. 4450 BEQ LC ;NO - NOT A REVERSE
  349. 4460 CMP RVSFLG ;REVERSE FLAG SET
  350. 4470 BEQ RVSOK ;YES - MOVE ON
  351. 4480 STA RVSFLG ;SET REVERSE FLAG
  352. 4490 LDA #$12 ;ASCII REVERSE ON
  353. 4500 JSR MEMSTO ;SAVE TO BUFFER
  354. 4510 JMP RVSOK ;MOVE ALONG
  355. 4520 LC CMP RVSFLG ;REVERSE FLAG CLEAR
  356. 4530 BEQ RVSOK ;YES - MOVE ON
  357. 4540 STA RVSFLG ;CLEAR REVERSE FLAG
  358. 4550 LDA #$92 ;ASCII REVERSE OFF
  359. 4560 JSR MEMSTO ;SAVE TO BUFFER
  360. 4570 RVSOK LDA (COL),Y ;CHECK COLOR
  361. 4580 AND #$0F ;MASK OFF HIGH NYBBLE
  362. 4590 CMP COLFLG ;IS IT CURRENT COLOR
  363. 4600 BEQ COLOK ;YES - MOVE ON
  364. 4610 STA COLFLG ;SET CURRENT COLOR
  365. 4620 STX $26 ;SAVE X-REGISTER
  366. 4630 TAX ;SET COLOR OFFSET
  367. 4640 LDA COLORS,X ;ASCII COLOR
  368. 4650 LDX $26 ;GET X-REGISTER
  369. 4660 JSR MEMSTO ;SAVE TO BUFFER
  370. 4670 COLOK LDA (SCN),Y ;GET SCREEN CHARACTER
  371. 4680 AND #$7F ;MASK OFF HIGH BIT
  372. 4690 STA $26 ;SAVE NORMAL CHARACTER
  373. 4700 AND #$1F ;MASK OFF 3 HIGH BITS
  374. 4710 CMP $26 ;LESS THAN 32
  375. 4720 BNE HIGH ;NO - MOVE ON
  376. 4730 HIGHER LDA $26 ;GET CHARACTER BACK
  377. 4740 CLC
  378. 4750 ADC #$40 ;CONVERT TO ASCII
  379. 4760 JMP MEMPRT ;SAVE AND GET ANOTHER
  380. 4770 HIGH LDA $26 ;GET VALUE BACK
  381. 4780 AND #$60 ;CHECK BITS 5 AND 6
  382. 4790 CMP #$60 ;IS IT MORE THAN 95
  383. 4800 BEQ HIGHER ;YES - (null) BACK
  384. 4810 LDA $26 ;GET CHARACTER BACK
  385. 4820 AND #$40 ;CHECK BIT 6
  386. 4830 CMP #$40 ;IS IT MORE THAN 63
  387. 4840 BNE LOW ;NO - MOVE ON
  388. 4850 LDA $26 ;GET VALUE BACK
  389. 4860 CLC
  390. 4870 ADC #$20 ;ADD 32
  391. 4880 STA $26 ;SAVE FOR NOW
  392. 4890 LOW LDA $26 ;GET VALUE BACK
  393. 4900 JSR MEMSTO ;SAVE TO BUFFER
  394. 4910 SOMNXT INY ;INCREMENT COLUMN COUNTER
  395. 4920 CPY LNCNT ;ARE WE DONE
  396. 4930 BEQ NXTLIN ;YES - DO NEXT LINE
  397. 4940 JMP SOME1 ;BACK FOR MORE
  398. 4950 NXTLIN LDA #$28 ;40TH CHARACTER
  399. 4960 CMP LNCNT ;IS IT END OF LINE
  400. 4970 BEQ NXT ;YES - (null) FOR MORE
  401. 4980 LDA #$00
  402. 4990 STA RVSFLG ;CLEAR REVERSE FLAG
  403. 5000 JSR MEMSTO ;SAVE END OF LINE
  404. 5010 NXT JMP (null)BACK ;BACK FOR MORE
  405. 5020 ;
  406. 5030 ;    ************************
  407. 5040 ;    * LOWER BUFFER POINTER *
  408. 5050 ;    ************************
  409. 5060 ;
  410. 5070 MEMLOW LDA MEMLOC ;SET TO CHECK
  411. 5080 BNE LOWER ;DO LOW BYTE ONLY
  412. 5090 DEC MEMLOC+1 ;DECREMENT HIGH BYTE
  413. 5100 LOWER DEC MEMLOC ;DECREMENT LOW BYTE
  414. 5110 RTS
  415. 5120 ;
  416. 5130 ;       *****************
  417. 5140 ;       * SHORTEN LINES *
  418. 5150 ;       *****************
  419. 5160 ;
  420. 5170 COMPIL JSR MEMLOW ;LOWER BUFFER POINTER
  421. 5180 LDY #$00 ;SET OFFSET COUNTER
  422. 5190 LDA (MEMLOC),Y ;GET A CHARACTER
  423. 5200 BEQ COMPIL ;ZERO - BACK FOR ANOTHER
  424. 5210 CMP #$11 ;CHECK FOR CURSOR DOWN
  425. 5220 BEQ COMPIL ;YES - BACK FOR MORE
  426. 5230 JSR MEMADD ;INCREMENT BUFFER POINTER
  427. 5240 LDA #$00
  428. 5250 JSR MEMSTO ;MARK END OF LINE
  429. 5260 LDA #$00
  430. 5270 JSR MEMSTO ;MARK END OF DATA
  431. 5280 LDA #$00
  432. 5290 STA MEMLOC ;RESET BUFFER POINTER
  433. 5300 LDA #$40
  434. 5310 STA MEMLOC+1 ;RESET BUFFER POINTER
  435. 5320 ;
  436. 5330 ;    ***********************
  437. 5340 ;    * STORE BASIC PROGRAM *
  438. 5350 ;    ***********************
  439. 5360 ;
  440. 5370 SAVLIN JSR LINPRT ;NEW LINE NUMBER
  441. 5380 LDX #$48 ;MAXIMUM LINE LENGTH
  442. 5390 LDY #$00 ;OFFSET COUNTER
  443. 5400 LDA #$99 ;LOAD CODE FOR PRINT
  444. 5410 JSR STOINC
  445. 5420 LDA #$22 ;OPEN QUOTES
  446. 5430 JSR STOINC
  447. 5440 STINFO LDA (MEMLOC),Y ;GET DATA
  448. 5450 PHA ;SAVE FOR NOW
  449. 5460 JSR MEMADD ;INCREMENT BUFFER POINTER
  450. 5470 PLA ;GET INFO BACK
  451. 5480 BEQ ENDLIN ;MOVE ON IF END OF LINE
  452. 5490 JSR STOINC ;SAVE DATA
  453. 5500 DEX ;IS LINE TOO LONG
  454. 5510 BNE STINFO ;NO - BACK FOR MORE
  455. 5520 LDA (MEMLOC),Y ;GET NEXT BYTE
  456. 5530 BEQ STINFO ;BACK FOR NEXT LINE
  457. 5540 LDA #$22 ;CLOSE QUOTES
  458. 5550 JSR STOINC
  459. 5560 LDA #$3B ;SEMI-COLON
  460. 5570 JSR STOINC
  461. 5580 JMP SAVLIN ;BACK FOR NEXT LINE
  462. 5590 ENDLIN LDA #$22 ;CLOSE QUOTES
  463. 5600 JSR STOINC
  464. 5610 LDA (MEMLOC),Y ;GET NEXT BYTE
  465. 5620 BNE SAVLIN ;NOT ZERO - BACK FOR MORE
  466. 5630 JSR STOINC ;SAVE THREE ZERO'S...
  467. 5640 LDA #$00 ;...AT END OF BASIC
  468. 5650 JSR STOINC
  469. 5660 LDA #$00
  470. 5670 JSR STOINC
  471. 5680 ;
  472. 5690 ;  *****************************
  473. 5700 ;  * SET END OF BASIC POINTERS *
  474. 5710 ;  *****************************
  475. 5720 ;
  476. 5730 LDA BASPNT ;END OF BASIC LOW BYTE
  477. 5740 STA $2D
  478. 5750 LDA BASPNT+1 ;END OF BASIC HIGH BYTE
  479. 5760 STA $2E
  480. 5770 ;
  481. 5780 ;      ********************
  482. 5790 ;      * CLEAN UP AND END *
  483. 5800 ;      ********************
  484. 5810 ;
  485. 5820 LDA #$93 ;CLEAR SCREEN
  486. 5830 JSR CHROUT
  487. 5840 JSR $A533 ;LINK BASIC LINES
  488. 5850 JSR $A659 ;SET CHRGET POINTER AND CLR
  489. 5860 JMP $A474 ;BACK TO BASIC
  490. 5870 ;
  491. 5880 ;
  492. 5890 ;
  493. 5900 ;*********************************
  494. 5910 ;                                *
  495. 5920 ;                                *
  496. 5930 ;       HELP SCREEN ROUTINE      *
  497. 5940 ;                                *
  498. 5950 ;                                *
  499. 5960 ;*********************************
  500. 5970 ;
  501. 5980 ;
  502. 5990 ;
  503. 6000 ;      ********************
  504. 6010 ;      * HELP SCREEN DATA *
  505. 6020 ;      ********************
  506. 6030 ;
  507. 6040 HLPSCN .BYTE 147
  508. 6050 .ASC "SCREEN 40.3"
  509. 6060 .BYTE 13
  510. 6070 .ASC "BOB SWIFT (TPUG #507)"
  511. 6080 .BYTE 13,13
  512. 6090 .ASC "COMMANDS IN SCREEN MODE:"
  513. 6100 .BYTE 13,13
  514. 6110 .ASC "<F1> CHANGE BORDER COLOR"
  515. 6120 .BYTE 13
  516. 6130 .ASC "<F2> COMPILE BASIC PROGRAM"
  517. 6140 .BYTE 13
  518. 6150 .ASC "<F3> CHANGE BACKGROUND COLOR"
  519. 6160 .BYTE 13
  520. 6170 .ASC "<F7> DISPLAY HELP SCREEN"
  521. 6180 .BYTE 13
  522. 6190 .ASC "<F8> EXIT TO BASIC"
  523. 6200 .BYTE 13,13
  524. 6210 .ASC "PRESS <F7> TO RETURN TO "
  525. 6220 .ASC "SCREEN MODE."
  526. 6230 ;
  527. 6240 ;   ****************************
  528. 6250 ;   * SAVE CURRENT SCREEN INFO *
  529. 6260 ;   ****************************
  530. 6270 ;
  531. 6280 HELP SEC
  532. 6290 JSR PLOT ;GET CURSOR POSITION
  533. 6300 TXA
  534. 6310 PHA ;SAVE ROW
  535. 6320 TYA
  536. 6330 PHA ;SAVE COLUMN
  537. 6340 LDA $C7 ;GET REVERSE FLAG
  538. 6350 STA RVSFLG ;SAVE FOR NOW
  539. 6360 LDA $0286 ;GET CURRENT COLOR
  540. 6370 STA COLFLG ;SAVE FOR NOW
  541. 6380 LDA BKGRND ;GET SCREEN COLOR
  542. 6390 STA COL ;SAVE FOR NOW
  543. 6400 LDA BORDER ;GET BORDER COLOR
  544. 6410 STA COL+1 ;SAVE FOR NOW
  545. 6420 LDA #$40
  546. 6430 STA BASPNT+1 ;BUFFER POINTER HIGH
  547. 6440 LDA #>SCREEN
  548. 6450 STA MEMLOC+1 ;SCREEN POINTER HIGH
  549. 6460 LDA #$00
  550. 6470 STA BASPNT ;BUFFER POINTER LOW
  551. 6480 STA MEMLOC ;SCREEN POINTER LOW
  552. 6490 LDA #<($4000+1000)
  553. 6500 STA SCN ;END OF BUFFER LOW
  554. 6510 LDA #>($4000+1000)
  555. 6520 STA SCN+1 ;END OF BUFFER HIGH
  556. 6530 JSR TRNSFR ;MOVE SCREEN INFO
  557. 6540 LDA #<COLOR
  558. 6550 STA MEMLOC ;COLOR MEMORY LOW
  559. 6560 LDA #>COLOR
  560. 6570 STA MEMLOC+1 ;COLOR MEMORY HIGH
  561. 6580 LDA #<($4000+2000)
  562. 6590 STA SCN ;END OF BUFFER LOW
  563. 6600 LDA #>($4000+2000)
  564. 6610 STA SCN+1 ;END OF BUFFER HIGH
  565. 6620 JSR TRNSFR ;MOVE COLOR INFO
  566. 6630 ;
  567. 6640 ;    **********************
  568. 6650 ;    * SET UP HELP SCREEN *
  569. 6660 ;    **********************
  570. 6670 ;
  571. 6680 LDA #9 ;BROWN
  572. 6690 STA BORDER ;SET BORDER COLOR
  573. 6700 LDA #3 ;CYAN
  574. 6710 STA BKGRND ;SET BACKGROUND COLOR
  575. 6720 LDA #$00 ;BLACK
  576. 6730 STA $0286 ;CURRENT COLOR
  577. 6740 TAX ;INITIALIZE COUNTER
  578. 6750 HSPRT LDA HLPSCN,X ;GET CHARACTER
  579. 6760 JSR CHROUT ;PRINT CHARACTER
  580. 6770 INX ;INCREMENT COUNTER
  581. 6780 CPX #HELP-HLPSCN ;ARE WE DONE
  582. 6790 BNE HSPRT ;NO - BACK FOR MORE
  583. 6800 ;
  584. 6810 ;    *********************
  585. 6820 ;    * WAIT FOR <F7> KEY *
  586. 6830 ;    *********************
  587. 6840 ;
  588. 6850 LDA #$00
  589. 6860 STA 198 ;EMPTY KEYBOARD BUFFER
  590. 6870 HPGET JSR GETIN ;CHECK KEYBOARD
  591. 6880 CMP #F7 ;IS <F7> PRESSED
  592. 6890 BNE HPGET ;NO - TRY AGAIN
  593. 6900 ;
  594. 6910 ;   *************************
  595. 6920 ;   * RETURN TO SCREEN MODE *
  596. 6930 ;   *************************
  597. 6940 ;
  598. 6950 LDA COL ;RESTORE PARAMETERS
  599. 6960 STA BKGRND ;  -BACKGROUND
  600. 6970 LDA COL+1
  601. 6980 STA BORDER ;  -BORDER
  602. 6990 LDA COLFLG
  603. 7000 STA $0286 ;  -CURRENT COLOR
  604. 7010 LDA RVSFLG
  605. 7020 STA $C7 ;  -REVERSE FLAG
  606. 7030 LDA #$40
  607. 7040 STA MEMLOC+1 ;BUFFER POINTER HIGH
  608. 7050 LDA #>SCREEN
  609. 7060 STA BASPNT+1 ;SCREEN POINTER HIGH
  610. 7070 LDA #$00
  611. 7080 STA MEMLOC ;BUFFER POINTER LOW
  612. 7090 STA BASPNT ;SCREEN POINTER LOW
  613. 7100 LDA #<(SCREEN+1000)
  614. 7110 STA SCN ;END OF SCREEN LOW
  615. 7120 LDA #>(SCREEN+1000)
  616. 7130 STA SCN+1 ;END OF SCREEN HIGH
  617. 7140 JSR TRNSFR ;RESTORE SCREEN INFO
  618. 7150 LDA #<COLOR
  619. 7160 STA BASPNT ;COLOR POINTER LOW
  620. 7170 LDA #>COLOR
  621. 7180 STA BASPNT+1 ;COLOR POINTER HIGH
  622. 7190 LDA #<(COLOR+1000)
  623. 7200 STA SCN ;END OF COLOR LOW
  624. 7210 LDA #>(COLOR+1000)
  625. 7220 STA SCN+1 ;END OF COLOR HIGH
  626. 7230 JSR TRNSFR ;RESTORE COLOR INFO
  627. 7240 PLA
  628. 7250 TAY ;CURSOR Y-POSITION
  629. 7260 PLA
  630. 7270 TAX ;CURSOR X-POSITION
  631. 7280 CLC
  632. 7290 JMP PLOT ;SET CURSOR AND RETURN
  633. 7300 .END
  634. 7310 CLOSE2:CLOSE3:CLOSE4:CLOSE15:OPEN15,8,15:CLOSE15
  635.